package com.woniu.utils;
import lombok.Data;

import java.io.Serializable;


import lombok.Data;

import java.io.Serializable;

@Data
public class ResponseResult<T> implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 响应状态码，比如 200 表示成功，500 表示服务器错误等，可自定义一套状态码规则
     */
    private int code;
    /**
     * 响应消息，用于向前端传递简单说明，如“操作成功”“参数校验失败”等
     */
    private String message;
    /**
     * 响应数据，泛型 T 支持多种类型，如查询单个对象、列表数据、分页数据等
     */
    private  T data;

    /**
     * 无参构造函数
     */
    public ResponseResult() {
    }

    /**
     * 带参构造函数，快速构建响应结果
     * @param code 状态码
     * @param msg  响应消息
     * @param data 响应数据
     */
    public ResponseResult(Integer code, String msg, T data) {
        this.code = code;
        this.message = msg;
        this.data = data;
    }

    /**
     * 快速构建成功响应（带数据）的静态方法
     * @param data 响应数据
     * @param <T>  数据泛型
     * @return 构建好的响应结果对象
     */
    public static <T> ResponseResult<T> success(T data) {
        return new ResponseResult<>(200, "操作成功", data);
    }

    /**
     * 快速构建成功响应（不带数据，仅提示成功）的静态方法
     * @param <T> 泛型占位，实际无数据时可传 Void 等
     * @return 构建好的响应结果对象
     */
    public static <T> ResponseResult<T> success() {
        return new ResponseResult<>(200, "操作成功", null);
    }

    /**
     * 快速构建失败响应的静态方法
     * @param code 自定义的失败状态码
     * @param msg  失败提示消息
     * @param <T>  泛型占位，无数据时常用 Void
     * @return 构建好的响应结果对象
     */
    public static <T> ResponseResult<T> fail(Integer code, String msg) {
        return new ResponseResult<>(code, msg, null);
    }

    /**
     * 快速构建成功响应（带数据）的静态方法
     * @param data 响应数据
     * @param <T>  数据泛型
     * @param msg  自定义消息
     * @return 构建好的响应结果对象
     */
    public static <T> ResponseResult<T> success(String msg, T data) {
        return new ResponseResult<>(200, msg, data);
    }


}
